package cn.java;

import java.util.concurrent.Phaser;

public class PhaserDemo {
    public static void main(String[] args) {
        Phaser phaser = new Phaser(1){};

        for (int i = 0; i < 3; i++) {
            phaser.register(); // 每个子线程注册
            new Thread(() -> {
                System.out.println(Thread.currentThread().getName() + " 执行任务...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                // 到达同步点，等待其他线程
                phaser.arriveAndAwaitAdvance();
                System.out.println(Thread.currentThread().getName() + " 进入下一阶段");
            }).start();
        }

        // 主线程等待所有子线程完成第一阶段
        phaser.arriveAndAwaitAdvance();
        System.out.println("所有线程完成第一阶段");

        // 可继续进行第二阶段...
        phaser.arriveAndAwaitAdvance();
        System.out.println("所有线程完成第二阶段");

        phaser.arriveAndDeregister(); // 主线程注销
        System.out.println();
    }
}
